# 在view.py中创建路由
from info.constants import CLICK_RANK_MAX_NEWS, HOME_PAGE_MAX_NEWS
from info.models import User, News, Category
from info.response_code import RET
from . import index_blu
import logging
from info import redis_store
from flask import render_template, current_app, session, request, jsonify
from info import db


# 创建一个新闻列表显示
@index_blu.route('/news_list')
def news_list():
    '''
    步骤
        1.获取参数
        2.验证参数
        3.根据参数查找数据库
        4.返回参数

    cid	string	是	分类id
    page	int	否	页数，不传即获取第1页
    per_page	int	否	每页多少条数据，如果不传，默认10条
    '''
    # 1.获取参数
    # request.args.get('cid', 1) 这里的1 是一个默认值 1
    cid = request.args.get('cid', 1)
    page = request.args.get('page', 1)
    per_page = request.args.get('per_page', HOME_PAGE_MAX_NEWS)
    # 2.验证参数
    try:
        cid = int(cid)
        page = int(page)
        per_page = int(per_page)
    except Exception as e:
        return jsonify(errno=RET.PARAMERR, errmsg='传入参数格式有问题')

    # 3 查找数据库
    # 根据分类查找数据并根据创建时间来排序
    # 分两种 为1的就是全部数据 为 2 3 4 5 6 就是根据分类查找数据
    list_news = None
    if cid == 1:
        list_news = News.query \
            .order_by(News.create_time.desc()) \
            .paginate(page, per_page, False)
    else:
        # .filter(News.category_id == cid) 过滤新闻分类
        # order_by(News.create_time.desc() 根据时间排序
        # paginate(page,per_page,False) 分页 False有错误不要跑出来
        list_news = News.query \
            .filter(News.category_id == cid) \
            .order_by(News.create_time.desc()) \
            .paginate(page, per_page, False)
    # 4.返回参数
    # 当前的分页内容

    news_li = list_news.items

    # 因为显示的数据都是类 没有提取出来所以在发送数据之前还需要将数据提取出来
    news_dict_list = []
    for news in  news_li:
        news_dict_list.append(news.to_basic_dict())
    # page 当前页数
    currentPage = list_news.page
    # 总页数
    totalPage = list_news.pages
    '''
    errno	int	是	错误码
    errmsg	string	是	错误信息
    cid	string	是	当前新闻数据的分类id
    totalPage	int	否	总页数
    currentPage	int	否	当前页数
    newsList  分页的数据
    '''
    return jsonify(errno=RET.OK,
                   errmsg='发送成功',
                   cid=cid,
                   totalPage=totalPage,
                   currentPage=currentPage,
                   newsList=news_dict_list)


# 给当前的主页返回一个图标
@index_blu.route('/favicon.ico')
def get_favicon():
    # 将本地资源图片返还给浏览器
    # current_app 等价于 app =Flask（__name__）
    # send_static_file 将静态资源图片返回给浏览器
    return current_app.send_static_file('news/favicon.ico')


# 由主页路由渲染主页
@index_blu.route('/')
def index():
    # 显示分类
    category_list = Category.query.all()

    # 显示点击排行
    # 查询新闻中点击量最高的降序排列 获取前10条数据CLICK_RANK_MAX_NEWS
    news_click_list = News.query.order_by(News.clicks.desc()).limit(CLICK_RANK_MAX_NEWS)
    # 判断用户是否登录
    user_id = session.get('user_id')
    user = None
    if user_id:
        # 判断user_id为空 判断数据库中是否有这么一个人（假设这个人被删除就不能找到）
        user = User.query.get(user_id)
    return render_template('news/index.html', user=user, news_click_list=news_click_list, category_list=category_list)
